# -*- coding: utf-8 -*-
import os, sys, subprocess
        
class NetScan:
    def getIfaceData(self,interfejs):
        """
            Metoda pobiera argument interfejs(str) okreslajacy interfejs sieciowy dla ktorego ma sie wykonac.
            W przypadku powodzenia zwracana jest krotka (adres_ip, maska_podsieci)
        """ 
        
        from ifconfig import IFConfig
        #TODO walidacja netmaski
        ifcfg = IFConfig()
        ip =   ifcfg.get_ip_address(interfejs)
        maska = NetScan.long2cidr(ifcfg.get_netmask(interfejs))
        return (ip, maska)

    
    def scanNetwork(self,(ip,maska)):
        """
            Metoda pobiera jako argument krotke (adres_ip,maska_podsieci) opisującą sieć IP dla której ma 
            być wykonane skanowanie.
            Zwracana jest lista stringow, w kazdym z nich znajduja sie pojedyńcze linie wykonania programu
            NMAP
        """
        print "cmd: nmap -n -sP -T4 %s/%s" % (ip,maska)
        f = subprocess.Popen("/usr/bin/nmap -n -sP -T4 %s/%s" % (ip,maska), shell=True,stdout=subprocess.PIPE).stdout
        zwrot = f.readlines()
        f.close()
        return zwrot
    
    def long2cidr(self,longmask):
        import re,math
        m = re.match("^(\d+)\.(\d+)\.(\d+)\.(\d+)", longmask)
        return sum([ 8 - int(math.log(256-int(x),2)) for x in m.groups()])
    
    def parseNmapResults(self,results):
        import re
        hosts = []
        for line in results:
            p = re.match("Host (\d+\.\d+\.\d+\.\d+) appears to be up", line)
            if p:
                hosts.append(p.group(1))
        return hosts
                
         

if __name__ == "__main__":
    #p = NetScan()
    #wynik = p.scanNetwork(p.getIfaceData("eth1"))
    #print p.parseNmapResults(wynik)
    # a teraz zeskanuj dodatkowo 127.0.0.1
    #print p.parseNmapResults(p.scanNetwork(("127.0.0.0", "30")))
    import ifconfig
    i = ifconfig.IFConfig.get_ifaces_up()
    print i